KnigaRead.com/
KnigaRead.com » Научные и научно-популярные книги » Радиотехника » Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]

Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]". Жанр: Радиотехника издательство -, год -.
Перейти на страницу:

Косвенная индексная адресация со смещением

Синтаксис: d8(An,Xn.W [или. L]) (Хn может быть либо Dn, либо An)

Пример: MOVE.L 100(A0),100(A0,D7)

Адрес операнда определяется как (An) плюс (Хп) плюс 8-разрядное знаковое смещение d8


PC-относительная адресация со смещением

Синтаксис: d16(PC)

Пример: LEA 100(РС), АЗ

Адрес операнда отличается от адреса этой команды на величину 16-разрядного знакового смещения


PC-относительная адресация с индексом и смещением

Синтаксис: d8(PC,Xn.W или. L)

Пример: MOVE.W 100(PC,D0.W),D1

Адрес операнда отличается от адреса этой команды на величину суммы 8-разрядного знакового смещения и содержимого Хn.


Несколько пояснений: в первых двух режимах не адресуется память; адресуются регистры или непосредственные константы (т. е. константы, включенные в поток команд; они могут быть только источниками, но никогда не приемниками). Все остальные режимы служат для адресации памяти. Абсолютная адресация удобна для обращения к портам ввода- вывода или к отдельным ячейкам памяти.

Косвенная (особенно с постинкрементом или предекрементом) хороша для работы с массивами или стеком; кроме того, если адрес уже находится в адресном регистре, такая адресация быстрее абсолютной, так как при выполнении команды адрес (абсолютный) не требуется извлекать из памяти. PC-относительные режимы адресации особенно удобны при написании «позиционно-независимых» программ, поскольку все адреса определяются относительно самих программных строк; заметьте, что 8- и 16-разрядные смещения представляют собой знаковые целочисленные дополнения до 2, позволяя описывать ячейки, отстоящие от точки отсчета на ±127 или ±32767 байт соответственно. Обратите еще внимание на то, что непосредственные или РС-относительные операнды нельзя модифицировать (они «неизменяемы»).


11.03. Представление команд на машинном языке

Как уже упоминалось выше, язык ассемблера, использованный нами в примерах, не является «объектным кодом», фактически выполняемым микропроцессором. Скорее это мнемоническое представление, удобное для написания программ. Последовательность команд языка ассемблера, составляющая программу, должна быть преобразована в последовательность двоичных байт, выполняемых процессором. Как и в случае МП 8086, каждая команда языка ассемблера МП 68000 преобразуется (ассемблируется) в несколько байт машинного кода. Код операции (коп) всегда занимает 2 байт, но в тех случаях, когда требуется определить режимы адресации, к нему могут добавляться дополнительные слова (двухбайтовые). В зависимости от вида операции и режимов адресации команда может иметь длину от 2 до 10 байт. Например, команда

ADD.W (A1) +,D3

ассемблируется в код минимальной длины (2 байта), именно (D6 59)н, причем и номера регистров, и режимы адресации указываются (вместе с кодом операции) в самой 2-байтовой команде. С другой стороны, команда MOVE.W $FFFF,$A0000 ассемблируется в 8-байтовый код, а именно (33 FC FF FF 00 0А 00 00)н, причем в первых двух байтах указываются операция и режимы адресации, в следующих двух байтах — непосредственная константа, а в последних четырех байтах — абсолютный адрес (длинный) приемника.

ЦП, естественно, по самой своей конструкции умеет интерпретировать этот результирующий машинный код. Рассмотрение структуры машинного кода конкретной команды может помочь вам в понимании логики работы ЦП. На рис. 11.2 развернута структура самой употребительной команды МП 68000 MOVE.



Рис. 11.2. Структура команды MOVE.


Пройдемся по ней. Два лидирующих нуля идентифицируют (почти) команду, как операцию MOVE; следующие два бита определяют размер операндов, как это показано на рисунке. Любопытно отметить, что поскольку комбинация бит 00 не используется для описания размера, код 0000ххх…хх не входит число кодов команды MOVE (однако не думайте, что этот код пропадает — фирма Motorola использует его для других команд). Следующие 6 бит описывают режим адресации и регистр (если таковой используется) операнда-приемника, а последние 6 бит заключают ту же информацию об операнде-источнике; на рис. 11.2 показано, как кодируется эта информация. Заметьте, что последние 5 режимов адресации, не использующие регистр, разделяют между собой оставшийся номер режима (111) и различаются «фальшивыми» номерами регистра. Если режим адресации какого-либо из операндов требует дополнительной информации (непосредственные данные, абсолютные адреса, смещения), к коду команды добавляются дополнительные байты, как это показано на рис. 11.2.

Любопытно заметить, что МП 68000 расходует 1/4 х 3/4 = 19 % всех возможных кодов команд на команду MOVE, предоставляя все сочетания режимов адресации и для источника, и для приемника. Фирма Motorola не могла быть столь же расточительной для остальных 50 с лишком команд табл. 11.1, и возможности их адресации пришлось урезать.

К примеру, если использовать фирменное обозначение <еа> для полного набора команд, то можно образовать команды ADD < еа >, Dn или

ADD Dn, <еа>

но не все варианты полного сочетания

ADD <еа>, <еа>

В реальной жизни вы всегда пользуетесь ассемблером (который работает на компьютере или микропроцессорной «системе разработки») для выполнения черной работы по конструированию этих команд. Однако, чтобы убедиться, что мы действительно поняли суть дела, попробуем свои силы в «ручном ассемблировании». Закодируем команду

MOVE.W #$3FFF,(A1) +

Код размера равен 11 (слово); код режима приемника равен 011, а регистра — 001; для приемника код режима равен 111, а «регистра» — 100. Таким образом, код команды составляет

00 11 001 011 111 100, или 32FCH

а полностью команда кодируется как

32 FC 3F FF

Мы не без основания подозреваем, что дальнейшие абстрактные обсуждения системы команд и режимов адресации заставляет вас закрыть эту книгу навсегда. Поэтому давайте рассмотрим прострой пример программирования, после чего перейдем к сигналам магистрали МП 68008. После этого мы сможем выполнить полное проектирование микропроцессорного устройства на базе МП 68008, включая его программное обеспечение.

Иллюстрация команд и режимов адресации МП 68000 дана в программе 11.1, где показаны два способа копирования таблицы из 100Н байт, начинающейся в ячейке $8000, в непосредственно прилегающую область памяти (с адреса $8100).



В первом варианте для пересылки из памяти в память мы использовали косвенную адресацию со смещением (удобное средство, отсутствующее в МП 8086), а также инкремент указателя, декремент счетчика и условный переход. При частоте генератора 10 МГц цикл занимает 6,2 мкс, и вся таблица пересылается за 1,6 мс. Во втором варианте в программу введен второй адресный регистр, указывающий на приемник. В этом случае можно использовать постинкрементную адресацию и отказаться от команды ADDQ, что увеличивает скорость пересылки. Анализ на выход из цикла мы выполняем с помощью более эффективной (но рискованной) команды «декремент и условный переход» DBcc. В результате цикл выполняется почти в два раза быстрее (3,4 мкс на шаг, 0,87 мс на всю пересылку).

Упражнение 11.2. Напишите программу для вычисления суммы 16-разрядных слов в таблице, начинающейся с адреса $10000. Пусть длина таблицы в словах хранится в качестве первого элемента таблицы (он не должен входить в сумму); предположите также, что суммирование не приведет к переполнению.

Упражнение 11.3. Напишите программу для изменения порядка байтов в таблице, имеющей длину $100 байт и начинающуюся с адреса $1000.


Прямолинейный (но медленный) способ решения задачи заключается в изменении порядка байтов в процессе копирования во вспомогательный массив, который затем копируется на место исходного. Более быстрый способ предполагает изменение порядка байтов «на месте» (следите только, чтобы, шагая по таблице, не наступить себе же на ноги). Запрограммируйте оба метода.


11.04. Сигналы магистрали

Если вы усвоили взаимодействие сигналов на магистрали IBM PC, то разобраться с сигналами МП 68008 не составит труда — они схожи. Мы описали их в табл. 11.4 (имеющей тот же формат, что и табл. 10.1) и на рис. 11.3.



Рис. 11.3. Сигналы МП 68008.


Лучше всего воспользоваться уже испытанной последовательностью изучения и рассмотреть сначала программно-управляемую передачу данных («программно-управляемый ввод-вывод»), затем прерывания и, наконец, ПДП. Это не займет много времени.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*